from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.


def index(request):
    return HttpResponse('index')

"""

###增加数据###############
from book.models import BookInfo

# 方式一, 必须要手动调用 .save方法，数据才保存到数据库中.
book = BookInfo(
    name='Django',
    pub_date='2000-01-01',
    readcount=10
)
book.save() # 保存数据库

# 方式二.
# objects. 是什么呢?
# 相当于一个代理， 帮助我们实现增删改查.
# 执行后，直接将数据保存到数据库中了.
BookInfo.objects.create(
    name='Django-Drf',
    pub_date='2020-01-01',
    readcount=10
)


################修改数据###################
# 方式1.
# select * from bookinfo where id=6
book = BookInfo.objects.get(id=6)
book.name = 'drf入门'
# 需要保存，才能保存数据.
book.save()

# 方式2.
# filter,也是查询，找id=6的, 执行后立即更新了, get 方法返回的是对象， 没有update.
book = BookInfo.objects.filter(id=6).update(name='drf快速入门', commentcount=666)
print(book)


################删除数据###################
# 方式1.
book = BookInfo.objects.get(id=6)
# 删除分2种， 物理删除和逻辑删除.
book.delete()
# 这里也是直接删除.

BookInfo.objects.get(id=6).delete()
BookInfo.objects.filter(id=6).delete()

##############$$查询数据########################

# get 查询单一结果. 如果不存在，会抛出异常 DoesNotExist.
book = BookInfo.objects.get(id=1)

# all 查询多个.
books = BookInfo.objects.all()
# 多个人物.
from models import PeopleInfo
PeopleInfo.objects.all().count()

# 过滤查询.
# filter    获取n个
# exclude   排除, 获取n个
# get       获取1个

# filter获取的结果是n个，可以是0, 1, 以及任意值.
# 模型名.objects.filter(条件)
# 条件= 属性名__运算符=值


1. 查询编号为 1的图书.
book =BookInfo.objects.get(id=1)  # 简写形式
等价于 book = BookInfo.objects.get(id_exact=1)

BookInfo.objects.get(pk=1)
BookInfo.objects.get(pk__exact=1)

BookInfo.objects.get(id=1)
BookInfo.objects.filter(id=1)

2. 查询书名包含'湖'的图书.
BookInfo.objects.filter(name__contains='湖')

3. 查询书名以‘部’结尾的图书.
BookInfo.objects.filter(name__endswith='部')

4. 查询书名为空的图书.
BookInfo.objects.filter(name__isnull=True)
>>> <QuerySet []>
5. 查询编号为1,3,5的图书
BookInfo.objects.filter(id__in=[1,3,5])

6. 查询编号大于3的图书. gt >, lt <, gte >=, lte <=, e =,  

BookInfo.objects.filter(id__gt=3)

7. 查询编号不等于3的书籍.
BookInfo.objects.exclude(id=3)

7. 查询1980年发表的图书.
BookInfo.objects.filter(pub_date__year=1980)

8. 查询1990年1月1后发表的图书.
BookInfo.objects.filter(pub_date__gt='1990-1-1')





#####
# 多个对象比较， 用F对象.


from django.db.models import F, Q

# 使用: 2个属性的比较
# 语法形式: 以 filter为例. 模型类名.objects.filter(属性名__运算符=F('第二个属性名'))
# 查询阅读量大于等于评论量的图书.
BookInfo.objects.filter(readcount__gte=F('commentcount'))
# 查询阅读量大于等于评论量两倍的图书.
BookInfo.objects.filter(readcount__gte=F('commentcount')*2)

#########
# 并且查询.
# 查询阅读量<20且编号小于4的图书.
BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3)
BookInfo.objects.filter(readcount__gt=20, id__lt=3)

# 或者查询(要使用Q对象)
## id = 4, 或 id = 6 的对象.
BookInfo.objects.filter(Q(id=4)|Q(id=6))
# Q对象，也可以并且，用符号&
BookInfo.objects.filter(Q(id=4)&Q(name__contains='飞'))
# Q对象可以取not
BookInfo.objects.exclude(id=3)
BookInfo.objects.filter(~Q(id=3))

"""


